di Neil Tyagi
Sintesi
McAfee Advanced Threat Research ha individuato una campagna attiva basata su un’estensione del browser, concepita per rubare le criptovalute sostituendo di nascosto gli indirizzi dei portafogli digitali nel momento in cui un utente avvia una transazione. La campagna si diffonde tramite programmi non firmati (rilevati sia nella variante .NET sia Golang) che installano un’estensione per Chromium dannosa, spacciandola per una innocua utilità chiamata “Google Notes”.
Questa campagna è legata a quella di cui parlava un precedente articolo di McAfee Labs dal titolo “Il sinkholing di CountLoader: approfondimenti sulla sua recente campagna”,poiché sembra che entrambe le operazioni siano opera dello stesso autore. In quella precedente ricerca avevamo analizzato una carica virale di tipo “crypto clipper” che veniva iniettata direttamente nella memoria. In questo articolo ne analizziamo una che opera come ultima fase: un’estensione dannosa per browser, progettata per intercettare e manipolare le transazioni in criptovaluta.
In questo articolo spieghiamo in dettaglio come funziona l’estensione e forniamo un’analisi tecnica dei meccanismi che rendono questa minaccia particolarmente singolare. L’estensione funziona come uno strumento di crittografia che monitora gli appunti: tiene d’occhio le operazioni di copia e incolla, individua gli indirizzi dei portafogli (wallet) su diverse blockchain (catene a blocchi) e li sostituisce con indirizzi controllati dall’autore dell’attacco, appena prima che la vittima incolli il contenuto. Dato che la maggior parte delle transazioni su blockchain è irreversibile, basta anche una sola esecuzione ininterrotta per causare una perdita economica permanente.
Sono due le caratteristiche che distinguono questa campagna dalle tipiche minacce dei clipper:
- Abuso del trust-layer (il “livello di fiducia”) di Chromium. Il programma installa di nascosto un’estensione dannosa nei browser basati su Chromium, come Google Chrome, Brave e Microsoft Edge, modificando i file delle impostazioni protette del browser. Di solito, questi browser salvano i dati di verifica della sicurezza (valori hash/HMAC) insieme alle impostazioni sensibili per rilevare eventuali modifiche non autorizzate. Dopo aver manomesso i file, il malware ricalcola e aggiorna questi valori di sicurezza, inducendo così il browser a credere che l’estensione dannosa sia invece legittima. Questo permette all’estensione di aggirare la normale procedura di installazione dal negozio online e di caricarsi in modo silente senza l’autorizzazione dell’utente. Nelle versioni aggiornate dei browser Chrome ed Edge, affinché l’estensione si carichi correttamente la vittima deve attivare manualmente la modalità sviluppatore; chi invece utilizza versioni non aggiornate dei browser basati su Chromium rimane esposto a un rischio elevato. Comunque, per far abilitare la modalità sviluppatore nelle versioni più recenti, l’aggressore può ricorrere a tecniche di ingegneria sociale.
- Sistema di comando e controllo basato su blockchain. Poiché questa estensione non contiene un dominio di comando e controllo (C2) incorporato nel programma (hardcoded), interroga tramite RPC (chiamata di procedura remota) un endpoint di una blockchain pubblica, richiama in sola lettura un metodo di contratto intelligente (contratto che applica automaticamente le condizioni), infine decodifica la risposta nel momento dell’esecuzione per rivelare il suo C2 attivo, che è risultato al momento dell’analisi Zebregts[.]com . Questa tecnica, detta “EtherHiding”, complica gli sforzi di contrasto al crimine perché l’autore dell’attacco può cambiare l’infrastruttura aggiornando il valore di un contratto intelligente invece di ridistribuire il malware.
La telemetria di McAfee indica che l’infezione è distribuita nel mondo, ma con una forte concentrazione in India. Piuttosto che a un’operazione specifica per una determinata regione, l’ampiezza dell’area geografica fa pensare a un approccio opportunistico rivolto agli utenti delle criptovalute.
Diffusione geografica

L’analisi dei dati telemetrici indica che i contagi sono distribuiti a livello globale, con una concentrazione significativamente più alta in India rispetto alle altre regioni.
L’ampiezza della sua presenza geografica mette in evidenza la vasta portata della campagna, il che fa pensare a un attacco opportunistico piuttosto che mirato a una regione specifica.
L’estensione dannosa: “Google Notes”
Questo malware si camuffa come un’estensione apparentemente innocua: Google Notes.
Figura 1. L’estensione dannosa al centro di questa campagna.
L’estensione si presenta come un’applicazione per fare annotazioni, dall’aspetto minimalista e apparentemente legittima, denominata “Google Notes”, completa di un’icona chiara e di un’interfaccia utente funzionale (e semplicistica).
La copertura è ben studiata: un utente che apra manualmente l’estensione trova che funziona proprio come promesso, il che smorza ogni sospetto. La logica dannosa dell’estensione è implementata negli script dei service worker che funzionano in background e negli script di contenuto, che operano completamente al di fuori della vista dell’interfaccia utente.
Il primo grande campanello d’allarme suona già quando si installa l’estensione, che richiede autorizzazioni di sicurezza e diritti di accesso sproporzionati per una semplice applicazione di annotazioni:
- accesso a tutti gli URL, che consente l’iniezione di script nei contenuti di ogni sito visitato dall’utente;
- accesso alla cronologia di navigazione;
- accesso in lettura e scrittura agli appunti.
Misure di mitigazione e raccomandazioni
Per i consumatori
- Prima di confermare qualsiasi transazione in criptovaluta, controlla visivamente che i primi e gli ultimi sei caratteri dell’indirizzo del destinatario corrispondano a quelli della fonte originale, meglio se su un dispositivo diverso.Questa semplice abitudine ti permette di sventare la stragrande maggioranza degli attacchi dei “clipper”.
- Installa le estensioni del browser esclusivamente dal Chrome Web Store ufficiale, dal sito Componenti aggiuntivi di Edge o da piattaforme equivalenti. Un’estensione che compare nell’elenco di quelle installate senza che tu la ricordi chiaramente va considerata sospetta.
- Controlla le autorizzazioni concesse a ogni estensione installata. Uno strumento per fare annotazioni non ha alcun motivo valido per accedere a tutti i siti web, alla cronologia di navigazione o agli appunti.
- Evita di eseguire file eseguibili non firmati provenienti da fonti non autorevoli, in particolare quelle che offrono versioni gratuite o craccate di software a pagamento: sono infatti un vettore di diffusione molto comune per questa categoria di programmi di installazione.
- Tieni aggiornate e attive le protezioni degli endpoint; i clienti McAfee sono protetti da questa specifica campagna, come descritto di seguito.
Le soluzioni di sicurezza McAfee proteggono gli utenti su più livelli
1. McAfee rileva questa minaccia come CryptoStealer.NE e garantisce la sicurezza dei clienti

2. Protezione dagli scaricamenti dannosi
Il comportamento del programma di installazione, che scarica ed esegue a distanza la carica virale, viene segnalato e bloccato da McAfee prima che l’infezione venga completata. Nei nostri test, tutti i domini e gli URL dannosi sono stati bloccati da McAfee.
3. Protezione della rete
McAfee blocca le connessioni alle infrastrutture dannose note (i server di comando e controllo), impedendo l’acquisizione dell’indirizzo del portafogli digitale.
4. Informazioni sulle minacce in tempo reale
Poiché questa minaccia è stata identificata nella telemetria di McAfee, è possibile mettere rapidamente in atto le protezioni per:
- bloccare varianti simili;
- individuare le infrastrutture correlate;
- proteggere i clienti in tutto il mondo.
Come funziona questa campagna di attacchi
Attività del malware
- Installa un’estensione del browser in modo silente (caricamento laterale, o sideloading, dell’estensione web).
- Controlla ciò che si copia e incolla (soprattutto gli indirizzi delle criptovalute).
- Funziona quando si effettua una transazione in criptovaluta.
- Sostituisce di nascosto l’indirizzo del portafogli con quello dell’autore dell’attacco.
- Invia i soldi a quest’ultimo invece che al destinatario previsto.
Dato che le transazioni in criptovaluta sono in genere irreversibili, le vittime possono perdere i propri fondi definitivamente.
Figura 3. Come funziona l’estensione, in poche parole.
Le principali capacità individuate
1. Installazione silente di un’estensione
Il malware non usa il negozio ufficiale del browser, ma modifica direttamente i file del browser stesso per installare l’estensione (caricamento laterale o sideloading).
Questo aggira le normali richieste di sicurezza e la consapevolezza dell’utente.
2. Accesso completo al browser


L’estensione dannosa richiede autorizzazioni eccessive, ad esempio:
- accesso a tutti i siti web;
- lettura della cronologia di navigazione;
- lettura e modifica del contenuto degli appunti.
3. Intercettazione di indirizzi delle criptovalute
L’estensione contiene una logica per rilevare gli indirizzi dei portafogli in diverse criptovalute:
Figura 7. Espressioni regolari e indirizzi di riserva incorporati per le criptovalute.
- Gli indirizzi dei portafogli di riserva indicati nel codice non vengono utilizzati per ogni transazione, ma fungono da meccanismo secondario nel caso in cui il recupero dinamico degli indirizzi dal server controllato dal pirata informatico non vada a buon fine.
- In condizioni di funzionamento normale, l’estensione recupera gli indirizzi sostitutivi da un server remoto, consentendo l’assegnazione dinamica dei portafogli, potenzialmente su base individuale per ogni vittima.
- Gli indirizzi di riserva garantiscono che l’attacco continui a funzionare anche se l’infrastruttura di comando e controllo è temporaneamente indisponibile o bloccata.

- Questa funzione serve a ottenere l’indirizzo del portafogli sostitutivo controllato dall’autore dell’attacco, corrispondente all’indirizzo originale della vittima.
- Invia l’indirizzo del portafogli intercettato al backend del pirata informatico e usa la risposta per sostituire dinamicamente l’indirizzo originale.
- Se la richiesta al backend fallisce, la funzione ricorre a un indirizzo predefinito e incorporato, garantendo così il proseguimento ininterrotto dell’attività dannosa.
- 3J98t1Wxxxx è l’indirizzo che è stato copiato negli appunti.
4. Elusione del rilevamento e invisibilità

- La configurazione include una chiave API incorporata, che viene utilizzata dall’estensione per autenticare la comunicazione con l’infrastruttura controllata dall’autore dell’attacco.
- Un URL RPC, che punta a un nodo di una blockchain pubblica, viene usato per recuperare in modo dinamico le informazioni sul server di backend, consentendo al criminale di nascondere infrastrutture critiche dietro sistemi decentralizzati.
- La presenza di un indirizzo e di un metodo relativi a un contratto intelligente indica che il malware recupera il proprio dominio di comando e controllo (C2) in modo indiretto tramite interrogazioni alla blockchain. Ciò rende più difficili sia lo smantellamento sia il tracciamento dell’attività criminosa.
- I domini nella lista nera sono un elenco di siti web di ispezione della blockchain nei quali l’estensione non funziona; l’elenco serve a non insospettire la vittima che sta incollando il proprio indirizzo per controllare il saldo del portafogli o per verificare le transazioni effettuate.


- L’analisi dinamica rivela che il malware risolve il proprio dominio di comando e controllo tramite un contratto intelligente sulla blockchain il quale, durante l’esecuzione, ha restituito il dominio devops-offensive[.]cc.
- La risposta proveniente dalla blockchain viene decodificata durante l’esecuzione, rivelando il dominio C2 attivo (devops-offensive.cc).
- Questo dominio non è incorporato nel codice sorgente, il che permette all’autore dell’attacco di aggiornare l’infrastruttura senza modificare il malware.
- Il dominio risolto viene memorizzato nella cache locale per garantire la persistenza e ridurre la ripetizione delle richieste in rete.

La stringa con codifica lunga viene decodificata usando questa funzione per ottenere il dominio finale dell’autore dell’attacco.

Tecniche di persistenza ed elusione
L’approccio della campagna, caratterizzato da persistenza e capacità di eludere i controlli, è intenzionale e articolato su più livelli. L’operatore ha chiaramente puntato su due caratteristiche: bassa visibilità per l’utente ed elevata resistenza contro smantellamento e analisi statica.
Persistenza
- La registrazione dell’estensione tramite la manomissione delle preferenze protette garantisce che venga caricata a ogni successivo avvio del browser senza bisogno di alcun meccanismo ausiliario di persistenza in Windows: niente chiavi Run nel Registro di sistema, né attività pianificate o servizi che chi va a caccia di endpoint di solito controlla.
- La modalità sviluppatore viene abilitata a livello di programma quando necessario, consentendo alle estensioni decompresse di persistere senza attivare l’“avviso sulle estensioni decompresse” visualizzato periodicamente da Chromium per scoraggiare il caricamento laterale.
- Il dominio C2 memorizzato nella cache permette all’estensione di continuare a funzionare con un backend di cui sa il funzionamento corretto, anche se l’endpoint RPC della blockchain dovesse risultare temporaneamente non disponibile.
Elusione
- L’identità visibile dell’estensione, ossia una semplice app per fare annotazioni chiamata “Google Notes”, offre una copertura plausibile in caso l’utente consulti l’elenco delle estensioni installate.
- I valori HMAC ricalcolati superano la verifica di integrità di Chromium, evitando così che compaia il banner di avviso “estensione installata da una fonte sconosciuta” che allerterebbe l’utente.
- Il programma di installazione si elimina automaticamente dopo l’esecuzione, rimuovendo così dal disco la traccia più evidente della compromissione iniziale.
- La risoluzione del dominio C2 tramite una blockchain pubblica significa che nel pacchetto del malware non è presente alcun dominio di comando e controllo persistente; i sistemi di rilevamento basati sulla rete, configurati per indicatori codificati nei programmi, non si attivano finché il dominio non viene risolto e contattato.
- Le varianti multilinguaggio del programma di installazione (.NET e Golang) riducono l’efficacia delle firme degli artefatti di compilazione e delle funzionalità binarie.
- La sostituzione dinamica dei portafogli digitali per ogni indirizzo significa che gli indirizzi pubblicati degli aggressori diventano obsoleti rapidamente e non si trasformano in voci permanenti nella lista nera: chi si difende deve bloccare il servizio di backend stesso, non gli indirizzi da esso generati.
Logica di sostituzione del portafogli
La logica del clipper si articola su due livelli: il livello dello script di contenuto, che monitora l’attività degli appunti e i campi di inserimento DOM su ogni origine visitata; un livello in background che comunica con il backend dell’autore dell’attacco per recuperare gli indirizzi sostitutivi.
Quando l’estensione rileva un evento di copia, applica al contenuto degli appunti una serie di espressioni regolari specifiche per le criptovalute. Se trova una corrispondenza, l’indirizzo intercettato viene trasmesso al backenddell’autore dell’attacco tramite una richiesta autenticata (con la chiave API incorporata nella configurazione). Il backend risponde con un indirizzo sostitutivo specifico per l’originale inviato, che viene inserito negli appunti sovrascrivendo quello legittimo prima che la vittima possa incollarlo.
I test effettuati su un client backend ricostruito (realizzato reimplementando in Python il formato delle richieste dell’estensione e la sua logica di decodifica delle risposte) hanno fornito un profilo comportamentale rivelatorio:
- Bitcoin (BTC), Ethereum, Bitcoin Cash, Ripple e Dash: ogni indirizzo inviato viene associato a un unico indirizzo controllato dall’autore dell’attacco. Inviando di nuovo lo stesso originale, si ottiene la stessa sostituzione, il che indica una associazione deterministica univoca gestita dal server.
- Solana: tutti gli indirizzi inviati convergono su un unico indirizzo dell’autore dell’attacco, il che suggerisce che la funzione di associazione per ogni vittima sia implementata in modo selettivo a seconda della catena.
Analisi dei portafogli di criptovalute degli aggressori
Sulla base dei frammenti di codice dell’estensione web incaricata di recuperare gli indirizzi sostitutivi, è stato creato uno script Python per estrarre a livello di programma gli indirizzi dei portafogli del pirata informatico. La carica virale è stata creata utilizzando lo stesso codice del pirata, mentre il frammento “get replacement address” (“ottieni indirizzo sostitutivo”) è stato copiato direttamente. Nello script è stata fedelmente riprodotta anche la logica utilizzata dall’autore dell’attacco per decodificare i dati ricevuti dal server C2.
Lo script è stato poi provato su alcuni indirizzi dei portafogli Bitcoin (BTC). I risultati hanno mostrato che, per ogni indirizzo Bitcoin fornito, veniva restituito in risposta un indirizzo Bitcoin univoco e tutti gli indirizzi restituiti erano portafogli BTC validi. Ciò significa che, per ogni indirizzo BTC fornito, l’autore dell’attacco genera dinamicamente un nuovo portafogli legato a quello specifico indirizzo immesso. Inoltre, fornendo nuovamente lo stesso indirizzo, veniva restituito lo stesso indirizzo BTC, a conferma del fatto che l’indirizzo BTC di ciascuna vittima viene associato in modo deterministico a un singolo indirizzo specifico controllato dall’autore dell’attacco. Anche se alcuni dei portafogli illeciti contenevano fondi e altri erano vuoti, il fatto che il numero totale dei portafogli degli hacker sia sconosciuto rende difficile fare una stima attendibile dell’ammontare complessivo di criptovaluta rubata.
Lo stesso comportamento è stato osservato anche per Ethereum, dove per ogni immissione venivano restituiti indirizzi di portafogli diversi. È interessante notare che, quando lo script è stato testato con indirizzi Solana, veniva restituito un solo indirizzo, indipendentemente dal numero di indirizzi diversi forniti. Questo fa pensare che l’autore dell’attacco abbia implementato la funzione di associazione per indirizzo solo per alcune criptovalute specifiche, mentre per le altre ricorra a un unico portafogli statico di raccolta. Dato che l’indirizzo Solana è lo stesso per tutte le vittime, si nota un aumento evidente del suo saldo. Inoltre è emerso che uno degli indirizzi Ethereum individuati conteneva fondi per un valore di circa 1902 USD.
In sintesi, le criptovalute per le quali vengono generati indirizzi di portafogli univoci per ogni vittima includono Bitcoin, Ethereum, Bitcoin Cash, Ripple e Dash.
Figura 13. Carica virale creata come codice di attacco.


Esecuzione dello script con alcuni indirizzi di prova di portafogli Bitcoin
Figura 16. Per ogni indirizzo Bitcoin è stato restituito un indirizzo Bitcoin univoco. Tutti sono indirizzi validi di portafogli BTC.


Per fortuna, con Solana, quando si inseriscono più indirizzi ne viene restituito solo uno.Questo dimostra che l’autore dell’attacco ha implementato la funzione di associazione degli indirizzi solo su alcune criptovalute specifiche.
Figura 19. Aumento nell’importo del saldo.

Analisi tecnica del file .net (programma di installazione dell’estensione)


- Il malware incorpora un file JSON di configurazione completo direttamente all’interno del file binario, eliminando così la necessità di recuperare i dati di configurazione iniziali da fonti esterne.
- La configurazione incorporata include dettagli fondamentali come le chiavi API, l’URL del server di backend, le estensioni dei portafogli di destinazione e il manifesto completo delle estensioni con ampie autorizzazioni.

- Il programma di installazione recupera e convalida un archivio ZIP remoto (google-services[.]cc/base[.]zip)), che funge da principale carica virale per la distribuzione dell’estensione dannosa del browser. Segna così il passaggio dall’infezione iniziale alla compromissione a livello di browser.


- Il programma di installazione esegue una scansione di diversi browser basati su Chromium, tra cui Chrome, Edge, Opera e Brave, individuando i profili utente disponibili sul sistema.
- Per ogni profilo rilevato, il malware termina forzatamente il processo del browser per modificare in tutta sicurezza i file di configurazione senza interferenze.
- A quel punto inietta l’estensione dannosa modificando direttamente i file “Secure Preferences” e “Preferences”, per consentire il caricamento dell’estensione senza alcun intervento da parte dell’utente.

- Il malware individua i percorsi di installazione dei browser interrogando le directory di sistema standard. Riesce così a individuare le cartelle contenenti i dati degli utenti per Chrome, Edge, Opera e Brave.
- Elenca sistematicamente i profili del browser e cerca in particolare la presenza del file “Secure Preferences”, che contiene dati fondamentali relativi alla configurazione del browser e alle estensioni.
- Puntando ai profili con Secure Preferences, il malware si assicura di modificare solo gli ambienti del browser validi, aumentando l’affidabilità dell’iniezione dell’estensione.


- Il malware legge e modifica il file delle preferenze protette del browser, che controlla le estensioni installate e il loro stato di affidabilità.
- Inserisce l’estensione dannosa nella configurazione e cerca di rifirmare i dati modificati, in modo che le modifiche appaiano legittime ai controlli di integrità del browser.
- La configurazione aggiornata viene quindi salvata nuovamente sul disco, assicurando che l’estensione venga caricata automaticamente e rimanga attiva anche dopo il riavvio del browser.

Figura 27B. Il percorso dell’estensione viene aggiunto al file delle preferenze protette di Chrome.

- Per Brave e Opera, il malware inietta l’estensione dannosa direttamente nella configurazione del browser, aggiungendo voci nella sezione extensions.settings (oppure extensions.opsettings).
- Inoltre aggiorna i campi relativi all’integrità (protection.macs) per far sì che l’estensione iniettata risulti attendibile agli occhi del browser.
- Infine il malware cerca di attivare la modalità sviluppatore a livello di programma, permettendo alle estensioni decompresse di funzionare con meno restrizioni.

- Il malware cerca di ricalcolare le firme di integrità del browser generando nuovi valori MAC (Message Authentication Code, codice di autenticazione del messaggio) per il file “Secure Preferences” modificato.
- Per simulare il meccanismo di verifica interno di Chrome utilizza identificatori specifici del sistema, come il SID del computer, combinati con un valore iniziale.
- Ricalcolando questi controlli di integrità (MAC e super_mac), il malware cerca di far sembrare legittime al browser le modifiche non autorizzate che ha apportato.

- Il malware include un meccanismo di autoeliminazione progettato per rimuovere il file eseguibile del programma di installazione una volta completata l’esecuzione.
- Avvia un processo nascosto del prompt dei comandi che ritarda brevemente l’esecuzione prima di eliminare il file originale dal disco.
Conclusioni
Questa campagna illustra in modo chiaro la direzione che stanno prendendo i ladri di criptovaluta ai danni dei consumatori: prendere la categoria più vecchia e semplice di malware crittografico, il “clipper”, per potenziarne indisturbati tre dei suoi anelli più deboli. Gli indirizzi statici degli aggressori sono stati sostituiti con una associazione lato server, specifica per ogni vittima. I domini di comando e controllo, fragili e incorporati nel codice, sono stati sostituiti da una ricerca basata su blockchain che si può alternare con una singola transazione. Inoltre, un altrettanto fragile dropper (un file che rilascia un virus) è stato sostituito con un’estensione di Chromium che risiede all’interno dell’applicazione a cui l’utente si affida di più, caricata sotto la firma di integrità del browser stesso.
McAfee continuerà a monitorare questa campagna e l’infrastruttura a essa collegata. I nostri clienti, che sono protetti dai sistemi di rilevamento già in uso, beneficeranno degli aggiornamenti basati sui dati telemetrici man mano che verranno identificate nuove varianti e rotazioni nell’infrastruttura.
Indicatori di compromissione (IOC)
| Tipo | Categoria | Valore |
| SHA-256 | Programma di installazione .NET (BaseZipInstaller) | 2735e12030c195fb5454e4736c51b55b59664b93cae9f4bd5317afcd9c2af0bf 053620962047f50a91c6e8d1a6519eccc41fab51473f033086b4d816abe8bcb0 |
| SHA-256 | Variante del programma di installazione compilato in Golang | 11be4c47ff049322de41743f62544cafd32d67e24ad653b7ebedf8ebd63e0962 1432393691b415d0cd4680d9cee73e60896fbe63300d9f0355c96e91817e4b1d |
| URL | Distribuzione della carica virale | hxxps://google-services[.]cc/base[.]zip |
| Dominio | Comando e controllo (risolto tramite contratto intelligente) | devops-offensive[.]cc Zebregts[.]com |
| Wallet BTC | Portafogli della criptovaluta | 3JvDBvKbS6YYMKjV3R9e9Zfd67f467fNLy 1BbhVBxpniuZuAL1gGZnEMdQhmz9JGWpyT 3AcPNVh7NyESwX3ECymy3rkdH4Ke2c26Tj 1BVTrB47erypG3tevi1U9Fv6BbNUBEiuiX |
| Artefatto | Destinazione del caricamento laterale | File delle preferenze protette di Chromium (profili di Chrome, Edge, Brave e Opera) |
| File dell’estensione | manifest.json crypto-patterns.js Interceptor.js content-script.j cache.js domain-resolver.js service-worker.js api-client.js | ed2599d6a8f30d5eaf14ad7f855aece0acdf7efa4a148eb18e4d9f0d8e2cd90c daf82c67e8e5df6bbd5370172ac9374aa7dce48af05496e8ec3dba7b602c619b 6eb2f07265dd95cacd39dfcf0705786b97f3e173cf4e9b3dfe7bad141c9a9dd5 a2ffdbedc5c9f5400a2b1cf5d35f5ec1df06a74d0345f1035bcf75d36ed73e01 eb84ba4a0cd95655a021865d4fec93ae3393f86cc9848810ed0b49035b1c5e2c 6aaba685669d779ef8be8f7f4231096cfafd0ef386f3897c5e2106c177724fc8 2599064901308a97540af29197ed0b38702bbee38d6dbbfa61cf9eb5878353f3 ab450927b37e1b68e2be68832c354ac600e86e2545a904d4ca0ea283f2600cc2 |